2999. Функция-10

 

Пусть задана функция следующим образом:

Вычислите значение этой функции.

 

Вход. Два целых неотрицательных числа n и m (0 ≤ n, m ≤ 20).

 

Выход. Выведите значение функции f(m, n).

 

Пример входа

Пример выхода

4 2

6

 

 

РЕШЕНИЕ

рекурсия

 

Анализ алгоритма

В задаче следует реализовать заданную рекурсивную функцию.

Обратите внимание, что во входных данных значения переменных задаются в порядке n, m, тогда как в функцию они передаются в обратном порядке: f(m, n).

 

Реализация алгоритма

Приведем рекурсивную реализацию функции f.

 

int f(int m, int n)

{

  if (m == 0) return 1;

  if (m == n) return 1;

  return f(m-1,n-1) + f(m,n-1);

}

 

Основная часть программы. Читаем входные данные.

 

scanf("%d %d",&n,&m);

 

Вычисляем и выводим результат.

 

res = f(m,n);

printf("%d\n",res);

 

Java реализация

 

import java.util.*;

 

public class Main

{

  static int f(int m, int n)

  {

    if (m == 0) return 1;

    if (m == n) return 1;

    return f(m-1,n-1) + f(m,n-1);

  }

   

  public static void main(String[] args)

  {

    Scanner con = new Scanner(System.in);

    int n = con.nextInt();

    int m = con.nextInt();

   

    int res = f(m,n);

 

    System.out.println(res);

    con.close();

  }

}

 

Python реализация

Приведем рекурсивную реализацию функции f.

 

def f(m, n):

  if m == n or m == 0:

    return 1

  return f(m-1, n-1) + f(m, n - 1)

 

Основная часть программы. Читаем входные данные.

 

a, b = map(int, input().split())

 

Вычисляем и выводим результат.

 

print(f(b, a))